home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr31 / hades.zip / PWD.C < prev    next >
C/C++ Source or Header  |  1992-04-13  |  3KB  |  145 lines

  1. /***************
  2. **
  3. **  pwd.c
  4. **  last revised: april 10, 1992
  5. **
  6. **  implementation of password-functions.
  7. **  Written for DESPERATE password-cracker with HADES encryption engine by
  8. **  Remote. (thanx to SMail and Minix 1.5.10)
  9. **
  10. **  Copyright (C)1992, Zabkar
  11. **
  12. **  root@waves.hacktic.nl (Zabkar)
  13. **  root@room101.hacktic.nl (Remote)
  14. **
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <string.h>
  19. #include <stdlib.h>
  20. #include "pwd.h"
  21.  
  22. FILE *_pw_file;
  23.  
  24.  
  25. /***************
  26.  getpwent()
  27.  gets next password-entry from passwordfile
  28. ***************/
  29.  
  30. struct passwd *getpwent(void)
  31.   {
  32.    static struct passwd temp;
  33.    int r;
  34.  
  35.    if ((_pw_file == NULL) && (!pw_openfile(NULL)))
  36.       return NULL;
  37.    r = fscanf(_pw_file, "%[^:]:%[^:]:%d:%d:", temp.pw_name,
  38.       temp.pw_passwd, &(temp.pw_uid), &(temp.pw_gid));
  39.    if (!fscanf(_pw_file, "%[^:]:", temp.pw_gecos))
  40.       strcpy(temp.pw_gecos, "");
  41.    r += fscanf(_pw_file, "%[^:]:", temp.pw_dir);
  42.    if (!fscanf(_pw_file, "%[^:\n] ", temp.pw_shell))
  43.       strcpy(temp.pw_shell,"");
  44.  
  45.    if (r==5)
  46.       return &temp;
  47.    else
  48.       return NULL;
  49.    }
  50.  
  51.  
  52.  
  53. /***************
  54.  getpwuid()
  55.  gets password-entry of the user with uid=id
  56. ***************/
  57.  
  58. struct passwd *getpwuid(int id)
  59.   {
  60.   struct passwd *temp;
  61.  
  62.   if (setpwent())
  63.      return NULL;
  64.   while ((temp = getpwent()) != NULL)
  65.      if (temp->pw_uid == id)  {
  66.      setpwent();
  67.      return temp;
  68.      }
  69.   setpwent();
  70.   return NULL;
  71.   }
  72.  
  73.  
  74.  
  75. /***************
  76.  getpwnam()
  77.  gets password-entry of user with username name
  78. ***************/
  79.  
  80. struct passwd *getpwnam(char *name)
  81.   {
  82.   struct passwd *temp;
  83.  
  84.   if (setpwent())
  85.      return NULL;
  86.   while ((temp = getpwent()) != NULL)
  87.      if (strcmp(temp->pw_name, name) == 0)  {
  88.     setpwent();
  89.     return temp;
  90.     }
  91.   setpwent();
  92.   return NULL;
  93.   }
  94.  
  95.  
  96.  
  97. /***************
  98.  setpwent()
  99.  seeks the beginning of the passwordfile
  100. ***************/
  101.  
  102. int setpwent(void)
  103.   {
  104.   if (_pw_file == NULL)
  105.      pw_openfile(NULL);
  106.   return fseek(_pw_file, 0L, SEEK_SET);
  107.   }
  108.  
  109.  
  110.  
  111. /***************
  112.  endpwent()
  113.  seeks the end of the passwordfile
  114. ***************/
  115.  
  116. int endpwent(void)
  117.   {
  118.   int temp;
  119.  
  120.   temp = fclose(_pw_file);
  121.   _pw_file = NULL;
  122.  
  123.   return temp;
  124.   }
  125.  
  126.  
  127.  
  128. /***************
  129.  pwd_openfile()
  130.  causes the file with filename 'name' to be the passwordfile from
  131.  which all other functions get their information.
  132. ***************/
  133.  
  134. int pw_openfile(char *name)
  135.   {
  136.   if (name == NULL)
  137.     name = getenv("PASSWD");
  138.   if (name == NULL)
  139.     name = "\\etc\\passwd";
  140.   return (_pw_file = fopen(name, "r")) != NULL;
  141.   }
  142.  
  143.  
  144. /* EOF PWD.C */
  145.